home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / Libraries / Sherlock 2.0 / DevLibSrc / Main_DevLib / LIBdebug.h < prev    next >
Text File  |  1995-11-28  |  4KB  |  140 lines

  1. /*
  2.     devlib: Debugging and fatal error macros.
  3.  
  4.     source:  LIBdebug.h
  5.     started: November 4, 1993.
  6.     version:
  7.         November 28, 1995.
  8.             Always provide prototype for `err_assert_failed'.
  9.         November 9, 1995.
  10.             Added LIB_DONT_USE_ES logic so we can use Mac Dialogs
  11.                 instead of es routines for error messages.
  12.             Added err_error1...err_error4 and err_fatal1...err_fatal4.
  13.                 These are useful for Mac-style alerts.
  14.             #define err_error1...err_error4 and err_fatal1...err_fatal4 in terms of
  15.                 error and fatal when LIB_DONT_USE_ES is not defined.
  16.         July 11, 1994.
  17.             Added PERM_ASSERT macro.
  18. */
  19.  
  20. #ifndef LIBdebug_h_
  21. #define LIBdebug_h_
  22.  
  23. #pragma once
  24.  
  25. /*
  26.     The following macros are always defined.
  27. */
  28. #define current_ftag    SL_CALLNAME(0)
  29. #define caller_ftag        SL_CALLNAME(1)
  30. #define caller2_ftag    SL_CALLNAME(2)
  31. #define caller3_ftag    SL_CALLNAME(3)
  32.  
  33. #ifdef LIB_DONT_USE_ES
  34.  
  35.     #define PERM_ASSERT(a) if(!(a)) { err_assert_failed(#a, __LINE__, __FILE__); }
  36.         
  37. #else
  38.  
  39.     #define PERM_ASSERT(a)\
  40.         if(!(a)) {\
  41.             es_internal_err(#a, __LINE__, __FILE__); ecnl();\
  42.             fatal_end();\
  43.         }
  44.     
  45.     #define PERM_ASSERT_TRACE(a,statements)\
  46.         if(!(a)) {\
  47.             es_internal_err(#a, __LINE__, __FILE__); ecnl();\
  48.             statements; fatal_end();\
  49.         }
  50.         
  51.     #define error(stat)    if (err_begin()) { stat; err_context(); }
  52.     #define fatal(stat)    { fatal_begin(); stat; fatal_end(); }
  53.  
  54. #endif
  55.  
  56. #ifdef PRODUCTION
  57.  
  58.     #define ASSERT(a)
  59.     #define ASSERT_TRACE(a,statements)
  60.     #define DEBUG(a)
  61.  
  62.     #define DTAG(s)  char * dtag  = NULL
  63.     #define FTAG(s)  char * ftag  = NULL
  64.     #define FTAGV(s) char * ftagv = NULL
  65.  
  66. #else /* n PRODUCTION */
  67.  
  68.     #ifdef LIB_DONT_USE_ES
  69.     
  70.         #define ASSERT(a) if(!(a)) { err_assert_failed(#a, __LINE__, __FILE__); }
  71.     
  72.     #else
  73.  
  74.         #define ASSERT(a)\
  75.             if(!(a)) {\
  76.                 es_assert_failed(#a, __LINE__, __FILE__); fatal_end();\
  77.             }
  78.     
  79.         #define ASSERT_TRACE(a,statements)\
  80.             if(!(a)) {\
  81.                 es_assert_failed(#a, __LINE__, __FILE__);\
  82.                 enl(); statements; fatal_end();\
  83.             }
  84.     #endif
  85.  
  86.     #define DEBUG(a) a
  87.     
  88.     #define DTAG(s)  char * dtag  = s
  89.     #define FTAG(s)  char * ftag  = s
  90.     #define FTAGV(s) char * ftagv = s
  91.  
  92. #endif /* n PRODUCTION */
  93.  
  94. /* 
  95.     Function prototypes for application-specific routines called by the debugging macros.
  96. */
  97.  
  98. #ifdef LIB_DONT_USE_ES
  99.  
  100.     /* These routines have fixed format for compatibility with the Mac ParamText toolbox call. */
  101.     
  102.     void err_assert_failed (char * condition, int line, char * file);
  103.     
  104.     void err_error1(char * mess1);
  105.     void err_error2(char * mess1, char * mess2);
  106.     void err_error3(char * mess1, char * mess2, char * mess3);
  107.     void err_error4(char * mess1, char * mess2, char * mess3, char * mess4);
  108.     
  109.     void err_fatal1(char * mess1);
  110.     void err_fatal2(char * mess1, char * mess2);
  111.     void err_fatal3(char * mess1, char * mess2, char * mess3);
  112.     void err_fatal4(char * mess1, char * mess2, char * mess3, char * mess4);
  113.  
  114. #else
  115.  
  116.     void err_assert_failed (char * condition, int line, char * file);
  117.  
  118.     void es_assert_failed (char * condition, int line, char * file);
  119.     void es_internal_err (char * condition, int line, char * file);
  120.  
  121.     bool err_begin    (void);
  122.     void err_context(void);
  123.  
  124.     void fatal_begin(void);
  125.     void fatal_end    (void);
  126.  
  127.     #define err_error1(m1)            error(es(m1))
  128.     #define err_error2(m1,m2)        error(es(m1); es(m2))
  129.     #define err_error3(m1,m2,m3)    error(es(m1); es(m2); es(m3))
  130.     #define err_error4(m1,m2,m3,m4)    error(es(m1); es(m2); es(m3); es(m4))
  131.     
  132.     #define err_fatal1(m1)            fatal(es(m1))
  133.     #define err_fatal2(m1,m2)        fatal(es(m1); es(m2))
  134.     #define err_fatal3(m1,m2,m3)    fatal(es(m1); es(m2); es(m3))
  135.     #define err_fatal4(m1,m2,m3,m4)    fatal(es(m1); es(m2); es(m3); es(m4))
  136.     
  137. #endif
  138.  
  139. #endif /* LIBdebug_h_ */
  140.